////////////////////////////////////////////////////////////
//
//   |      |      |
//   |      |      |
//   |      |      |
//   |      |      |
//   |      |      |
//--------------------------
//   A      B      C
//
//打印出来的结果说明：
//      A-->B表示从A最上边的一个搬到B最上边
//      A-->C表示从A最上边的一个搬到C最上边
//      B-->A  B-->C  C-->A  C-->B 同理
//
/////////////////////////////////////////////////////////////
#include<stdio.h>

//汉诺塔移动的递归思想过程
void process(size_t n, char one, char two, char three)//该函数的意义是:将n个盘子从one借助two移动到three
{
	if (n == 1)
		printf("%c-->%c\n",one,three);
	else
	{
		process(n - 1, one, three, two);//将n-1个盘子从one借助three移动到two
		printf("%c-->%c\n",one,three);//将第n个盘子从one移动到three
		process(n - 1, two, one, three);//最后将n-1个盘子从two借助one移动到three
	}
}

void Hanoi(size_t n)
{
	process(n, 'A', 'B', 'C');
}

int main()
{
	size_t n;
	printf("请输入有几层塔\n");
	scanf("%d",&n);

	Hanoi(n);

	return 0;
}
